package org.dylan.common.dao;

import java.io.Serializable;

import org.dylan.common.model.BaseQueryParam;
import org.dylan.common.paging.PageData;
import org.dylan.common.paging.PageRequest;
/**
 * 分页数据查询,支持对当前实体类的分页查询(使用Criteria实现)，以及通过hql(xsql格式)的分页查询
 * @author dylan
 *
 * @param <T>
 * @param <PK>
 */
public interface PagingDao<T, PK extends Serializable> extends BaseDao<T, PK> {
	/**
	 * 对当前实体类执行分页查询
	 * @param pageRequest
	 * @return
	 */
	public PageData<T> findByPage(PageRequest pageRequest);
	
	/**
	 * 给定数据查询的hql,进行分页的数据查询(此时假定pageRequest中的参数均为{@link BaseQueryParam})
	 * @param hql
	 * @param pageRequest
	 * @see PagingDao#pageQueryByHQL(String, String, PageRequest)
	 * @return
	 */
	public <E> PageData<E> pageQueryByHQL(String hql, final PageRequest pageRequest);
	
	/**
	 * 给定数据查询的hql和数据统计的hql,进行分页的数据查询(此时假定pageRequest中的参数均为{@link BaseQueryParam})
	 * @param hql
	 * @param countHql
	 * @param pageRequest
	 * @return
	 */
	public <E> PageData<E> pageQueryByHQL(String hql, String countHql,
			final PageRequest pageRequest);
}
